package IO操作;

/**
 * 文件字节流，低级流
 * FileInputStream fis =new FileInputStream("fos.txt");
 * read(),读取一个字节,返回值是一个int类型，对应的int值得2进制”低八位“
 * int d =fis.read；
 * String的构造器可以将给定的字节数组转换为字符串输出：
 * String line = new String(data, StandardCharsets.UTF_8);
 *

 *   FileOutputStream fos = new FileOutputStream("./fos.dat"，true);(true:为追加内容，不会覆盖原来内容)
 *   fos.write();写出内容到文本
 *   将字符转为字节的方法：byte[] data=字符.getBytes(UTF-8)
 *   小知识：如果write(97)会得到一个数字a
 *  'a'的2进制与整数97的2进制长得一样。
 *   该字节如果以10进制换算，会得到整数97.
 *   如果去ASC编码中会看到它对应字符'a'
 */

/**
 * 缓冲字节流：高级流(加快读写效率)
 * BufferedInputStream 和BufferedOutputSteam
 * 内部默认有个8kb数组
 * 同样具备read和write方法
 *  while((d = bis.read())!=-1){
 *             bos.write(d);
 *         }
 *
 */

/**
 * 对象字节流，高级流
 * ObjectInputStream和ObjectOutputStream
 *
 * 可以将对象进行序列化，保存到硬盘中
 * writeObject(Object obj)将给定的对象序列化为一组字节然后连接其他流将字节写出
 * 进行序列化时，对象必须实现可序列化接口Serializable，否则会抛异常
 * //transient修饰的变量会在对象序列化的时候忽略，节省字节.反序列化不会被输出
 *
 * ObjectInputStream可以反序列化，
 * 将字节还原为相应的对象，以Object类型返回
 * 独有方法：readObject()读取的字节应当是通过ObjectOutputStream序列化的一组字节，否则会抛异常
 * 返回值为一个对象：Person person = (Person)ois.readObject();(因为是Object多态所以可以强转为任何类型的对象)
 */

 //字符流
/**
 * 转换字符流：高级流(以char为最小单位读写数据)
 *InputStreamRead和OutputStreamWrite
 * 唯一一个字符流可以直接连接在字节流上，用于字符和字节直接的转换
 * OutputStreamWrite(文件，指定的字符集（UTF-8）)：按照给定的字符集格式将文件转换为字节后写出
 * 该字符流支持直接将字符串写出。所以可以直接用wtite方法
 * osw.write("你叉叉，穷哈哈，哈利波特骑着扫帚飞，sorry,sorry.");
 *
 * InputStreamReader(文件，指定的字符集（UTF-8）)：按照给定的字符集格式读取文件
 *该字符流的方法返回值为int值得一个char（2字节），相当于2进制应该是”低十六位“，返回-1则是读到末尾
 * char c=(char)isr.read:该方法一次读取一个字符
 */

/**
 *缓冲字符流
 * BufferedWrite(PrintWriter配合使用，内部连接BufferedWrite)和BufferedReader
 * 缓冲字符流内部同样有一个8192长度的char数组，(可以理解为是8192*2的字节)
 * PrintWriter：具有自动刷新功能(参数中填入true)和换行功能，内部连接BufferedWrite
 * 可以使用pw.println直接写出文字
 *   pw.println("和我在成都的接头走一走，哦哦哦哦~");
 *   注意：当使用print或者write去打印文字的时候，即便PrintWrite有true参数也无法自动刷新
 *
 *
 * BufferedReader：
 * 具备按行读取字符串的能力(一次性读一行的文字)
 * 读取的方法：String raedLine(),读到空行则返回空字符串，读到末尾则返回null
 * String line=br.readLine()!=null则是读到了内容
 * 直接输出 System.out.println(line);
 *
 */



















public class IO的总结 {
    public static void main(String[] args) {

    }
}
